/*
设置 i 为窗口起始位置，max_size 为记录最长无重复子串长度的变量，a 数组用于记录每个字符出现的次数（假设字符集大小为200）。
用 j 遍历字符串，对每个字符 c 进行处理。
如果字符 c 在窗口内出现过，则移动窗口的起始位置 i，直到该字符 c 在窗口内只出现一次。每次移动时，更新 a 数组以反映窗口的变化。
在每次扩展窗口时，更新 max_size 为当前窗口长度 j - i + 1 的最大值。最终返回 max_size，即最长无重复字符子串的长度。
*/
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int i = 0, max_size = 0;
        int a[200] = {0};
        for(int j = 0; j < s.size(); j++)
        {
            char c = s[j];
            while(a[c] > 0)
            {
                a[s[i]]--;
                i++;
            }
            a[c]++;
            max_size = max(max_size, j - i + 1);
        }
        return max_size;
    }
};